local KeyBoard = {
	VK_UNKNOWN = LuaGui.VirtualKey.VK_UNKNOWN,
    VK_0 = LuaGui.VirtualKey.VK_0,
    VK_1 = LuaGui.VirtualKey.VK_1,
    VK_2 = LuaGui.VirtualKey.VK_2,
    VK_3 = LuaGui.VirtualKey.VK_3,
    VK_4 = LuaGui.VirtualKey.VK_4,
    VK_5 = LuaGui.VirtualKey.VK_5,
    VK_6 = LuaGui.VirtualKey.VK_6,
    VK_7 = LuaGui.VirtualKey.VK_7,
    VK_8 = LuaGui.VirtualKey.VK_8,
    VK_9 = LuaGui.VirtualKey.VK_9,
    VK_A = LuaGui.VirtualKey.VK_A,
    VK_B = LuaGui.VirtualKey.VK_B,
    VK_C = LuaGui.VirtualKey.VK_C,
    VK_D = LuaGui.VirtualKey.VK_D,
    VK_E = LuaGui.VirtualKey.VK_E,
    VK_F = LuaGui.VirtualKey.VK_F,
    VK_G = LuaGui.VirtualKey.VK_G,
    VK_H = LuaGui.VirtualKey.VK_H,
    VK_I = LuaGui.VirtualKey.VK_I,
    VK_J = LuaGui.VirtualKey.VK_J,
    VK_K = LuaGui.VirtualKey.VK_K,
    VK_L = LuaGui.VirtualKey.VK_L,
    VK_M = LuaGui.VirtualKey.VK_M,
    VK_N = LuaGui.VirtualKey.VK_N,
    VK_O = LuaGui.VirtualKey.VK_O,
    VK_P = LuaGui.VirtualKey.VK_P,
    VK_Q = LuaGui.VirtualKey.VK_Q,
    VK_R = LuaGui.VirtualKey.VK_R,
    VK_S = LuaGui.VirtualKey.VK_S,
    VK_T = LuaGui.VirtualKey.VK_T,
    VK_U = LuaGui.VirtualKey.VK_U,
    VK_V = LuaGui.VirtualKey.VK_V,
    VK_W = LuaGui.VirtualKey.VK_W,
    VK_X = LuaGui.VirtualKey.VK_X,
    VK_Y = LuaGui.VirtualKey.VK_Y,
    VK_Z = LuaGui.VirtualKey.VK_Z,

    VK_NUMPAD0 = LuaGui.VirtualKey.VK_NUMPAD0,
    VK_NUMPAD1 = LuaGui.VirtualKey.VK_NUMPAD1,
    VK_NUMPAD2 = LuaGui.VirtualKey.VK_NUMPAD2,
    VK_NUMPAD3 = LuaGui.VirtualKey.VK_NUMPAD3,
    VK_NUMPAD4 = LuaGui.VirtualKey.VK_NUMPAD4,
    VK_NUMPAD5 = LuaGui.VirtualKey.VK_NUMPAD5,
    VK_NUMPAD6 = LuaGui.VirtualKey.VK_NUMPAD6,
    VK_NUMPAD7 = LuaGui.VirtualKey.VK_NUMPAD7,
    VK_NUMPAD8 = LuaGui.VirtualKey.VK_NUMPAD8,
    VK_NUMPAD9 = LuaGui.VirtualKey.VK_NUMPAD9,

    VK_F1 = LuaGui.VirtualKey.VK_F1,
    VK_F2 = LuaGui.VirtualKey.VK_F2,
    VK_F3 = LuaGui.VirtualKey.VK_F3,
    VK_F4 = LuaGui.VirtualKey.VK_F4,
    VK_F5 = LuaGui.VirtualKey.VK_F5,
    VK_F6 = LuaGui.VirtualKey.VK_F6,
    VK_F7 = LuaGui.VirtualKey.VK_F7,
    VK_F8 = LuaGui.VirtualKey.VK_F8,
    VK_F9 = LuaGui.VirtualKey.VK_F9,
    VK_F10 = LuaGui.VirtualKey.VK_F10,
    VK_F11 = LuaGui.VirtualKey.VK_F11,
    VK_F12 = LuaGui.VirtualKey.VK_F12,
    VK_F13 = LuaGui.VirtualKey.VK_F13,
    VK_F14 = LuaGui.VirtualKey.VK_F14,
    VK_F15 = LuaGui.VirtualKey.VK_F15,
    VK_F16 = LuaGui.VirtualKey.VK_F16,
    VK_F17 = LuaGui.VirtualKey.VK_F17,
    VK_F18 = LuaGui.VirtualKey.VK_F18,
    VK_F19 = LuaGui.VirtualKey.VK_F19,
    VK_F20 = LuaGui.VirtualKey.VK_F20,
    VK_F21 = LuaGui.VirtualKey.VK_F21,
    VK_F22 = LuaGui.VirtualKey.VK_F22,
    VK_F23 = LuaGui.VirtualKey.VK_F23,
    VK_F24 = LuaGui.VirtualKey.VK_F24,

    VK_LSHIFT = LuaGui.VirtualKey.VK_LSHIFT,
    VK_RSHIFT = LuaGui.VirtualKey.VK_RSHIFT,
    VK_LCONTROL = LuaGui.VirtualKey.VK_LCONTROL,
    VK_RCONTROL = LuaGui.VirtualKey.VK_RCONTROL,
    VK_LALT = LuaGui.VirtualKey.VK_LALT,
    VK_RALT = LuaGui.VirtualKey.VK_RALT,
    VK_LGUI = LuaGui.VirtualKey.VK_LGUI,
    VK_RGUI = LuaGui.VirtualKey.VK_RGUI,

    VK_TAB = LuaGui.VirtualKey.VK_TAB,
    VK_CLEAR = LuaGui.VirtualKey.VK_CLEAR,
    VK_RETURN = LuaGui.VirtualKey.VK_RETURN,
    VK_PAUSE = LuaGui.VirtualKey.VK_PAUSE,
    VK_CAPSLOCK = LuaGui.VirtualKey.VK_CAPSLOCK,
    VK_BACKSPACE = LuaGui.VirtualKey.VK_BACKSPACE,
    VK_ESCAPE = LuaGui.VirtualKey.VK_ESCAPE,
    VK_SPACE = LuaGui.VirtualKey.VK_SPACE,

    VK_HOME = LuaGui.VirtualKey.VK_HOME,
    VK_END = LuaGui.VirtualKey.VK_END,
    VK_LEFT = LuaGui.VirtualKey.VK_LEFT,
    VK_UP = LuaGui.VirtualKey.VK_UP,
    VK_RIGHT = LuaGui.VirtualKey.VK_RIGHT,
    VK_DOWN = LuaGui.VirtualKey.VK_DOWN,
    VK_INSERT = LuaGui.VirtualKey.VK_INSERT,
    VK_DELETE = LuaGui.VirtualKey.VK_DELETE,
    VK_PAGEUP = LuaGui.VirtualKey.VK_PAGEUP,
    VK_PAGEDOWN = LuaGui.VirtualKey.VK_PAGEDOWN,

    VK_EXCLAIM = LuaGui.VirtualKey.VK_EXCLAIM,           
    VK_QUOTEDBL = LuaGui.VirtualKey.VK_QUOTEDBL,         
    VK_HASH = LuaGui.VirtualKey.VK_HASH,                 
    VK_PERCENT = LuaGui.VirtualKey.VK_PERCENT,           
    VK_DOLLAR = LuaGui.VirtualKey.VK_DOLLAR,             
    VK_AMPERSAND = LuaGui.VirtualKey.VK_AMPERSAND,       
    VK_QUOTE = LuaGui.VirtualKey.VK_QUOTE,               
    VK_LEFTPAREN = LuaGui.VirtualKey.VK_LEFTPAREN,       
    VK_RIGHTPAREN = LuaGui.VirtualKey.VK_RIGHTPAREN,     
    VK_ASTERISK = LuaGui.VirtualKey.VK_ASTERISK,         
    VK_PLUS = LuaGui.VirtualKey.VK_PLUS,                 
    VK_COMMA = LuaGui.VirtualKey.VK_COMMA,               
    VK_MINUS = LuaGui.VirtualKey.VK_MINUS,               
    VK_PERIOD = LuaGui.VirtualKey.VK_PERIOD,             
    VK_SLASH = LuaGui.VirtualKey.VK_SLASH,               
    VK_UNDERSCORE = LuaGui.VirtualKey.VK_UNDERSCORE,     
    VK_QUESTION = LuaGui.VirtualKey.VK_QUESTION,         
    VK_LESS = LuaGui.VirtualKey.VK_LESS,                 
    VK_GREATER = LuaGui.VirtualKey.VK_GREATER,           
    VK_COLON = LuaGui.VirtualKey.VK_COLON,               
    VK_CARET = LuaGui.VirtualKey.VK_CARET,               
    VK_AT = LuaGui.VirtualKey.VK_AT,                     
    VK_SEMICOLON = LuaGui.VirtualKey.VK_SEMICOLON,       
    VK_RIGHTBRACKET = LuaGui.VirtualKey.VK_RIGHTBRACKET, 
    VK_LEFTBRACKET = LuaGui.VirtualKey.VK_LEFTBRACKET,   

    VK_NUMPAD_PLUS = LuaGui.VirtualKey.VK_NUMPAD_PLUS,
    VK_NUMPAD_MINUS = LuaGui.VirtualKey.VK_NUMPAD_MINUS,
    VK_NUMPAD_MULTIPLY = LuaGui.VirtualKey.VK_NUMPAD_MULTIPLY,

    VMK_NONE = LuaGui.VirtualMouseKey.VMK_NONE,
    VMK_LEFT = LuaGui.VirtualMouseKey.VMK_LEFT,
    VMK_MIDDLE = LuaGui.VirtualMouseKey.VMK_MIDDLE,
    VMK_RIGHT = LuaGui.VirtualMouseKey.VMK_RIGHT,
}

local key_pressed_map = {};

function KeyBoard:SetKeyPressed(keycode, pressed)
    key_pressed_map[keycode] = pressed;
end

function KeyBoard:IsKeyPressed(keycode)
    return key_pressed_map[keycode];
end

function KeyBoard:IsCtrlKeyPressed()
    return self:IsKeyPressed(KeyBoard.VK_LCONTROL) or self:IsKeyPressed(KeyBoard.VK_RCONTROL);
end

function KeyBoard:IsShiftKeyPressed()
    return self:IsKeyPressed(KeyBoard.VK_LSHIFT) or self:IsKeyPressed(KeyBoard.VK_RSHIFT);
end

function KeyBoard:IsAltKeyPressed()
    return self:IsKeyPressed(KeyBoard.VK_LALT) or self:IsKeyPressed(KeyBoard.VK_RALT);
end


return KeyBoard;